package de.preiscrawler.parser.media_deal;

import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;

import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;
import de.preiscrawler.AlleAnbieter;
import de.preiscrawler.parser.AbstractParser;
import de.preisrobot.entity.AbstractEntity;
import de.preisrobot.entity.Artikel;
import de.preisrobot.service.internal.PreisRobotParserException;

public class DvdPalaceParser<T extends AbstractEntity> extends AbstractParser<T> {

	@Override
	public int getAnbieter() {

		return AlleAnbieter.DVD_PALACE;
	}

	@Override
	protected void parseStream(List<T> list, InputStream in)
			throws IOException, PreisRobotParserException {

		final Source source = new Source(in);
		List<Element> allElements = source.getAllElements("table");
		for (Element everyTable : allElements) {

			List<Element> allRows = everyTable.getAllElements("tr");

			if (isContentTable(allRows))

				// jetzt haben wir die innere tablle mit dem content gefunden

				allRows.remove(0);// die erste row ist der header

			for (Element innerRow : allRows) {

				List<Element> allDetailLInks = innerRow.getAllElements("a");
				if (allDetailLInks == null || allDetailLInks.isEmpty())
					break;

				String detailLInk = allDetailLInks.get(0).getAttributeValue(
						"href");

				String url = detailLInk;

				if (url.startsWith("/datenbank/medien")) {
					System.out.println(url);

					DvdPalaceParserDetail  det = new DvdPalaceParserDetail ();
					try {
						List<?> parse = det
								.parse("http://www.dvd-palace.de" + url);
						list.addAll((Collection<? extends T>) parse);
					} catch (Exception e) {
						throw new PreisRobotParserException(
								"could not parse site: " + url, e);
					}
				}
			}
		}

	}

	/**
	 * wir suchen den mittleren table der den INhalt darstellt
	 * 
	 * @param allRows
	 */
	private boolean isContentTable(List<Element> allRows) {
		if (allRows == null || allRows.isEmpty())
			return false;
		int i = 0;
		for (Element element : allRows) {

			i++;
			if (i > 3)
				return false;

			List<Element> allElementsByClass = element
					.getAllElementsByClass("tabcontentbgwhite");

			List<Element> allElementsByClass2 = element
					.getAllElementsByClass("maintabcontentdarkwhite");

			if ((allElementsByClass != null && !allElementsByClass.isEmpty())
					|| (allElementsByClass2 != null && !allElementsByClass2
							.isEmpty())) {
				return true;
			}

		}

		return false;
	}

	public static void main(String[] args) throws Exception {
		DvdPalaceParser<Artikel> p = new DvdPalaceParser<Artikel>();
		String sourceUrlString = "http://www.dvd-palace.de/dvddatabase/dbsearch.php?&action=11&suchbegriff=xxxxxxxxxx&start=20";
		List<Artikel> parse =   p.parse(sourceUrlString);

	}
}
